/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pio.action.administrador;

import DBMS.DataBaseManager;
import clases.Opcion;
import clases.Pregunta;
import clases.Test;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

/**
 *
 * @author tamerdark
 */
public class TestAction extends DispatchAction {

    private String PAGE = "page";

    public ActionForward populate(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        Test t = new Test();
        ArrayList<Pregunta> preguntas = DataBaseManager.getInstance().consultarPreguntas();
        t.setPreguntas(preguntas);
        String advertencia = "<ul>";
        int porcentaje = 0;
        boolean respuestas = false;
        for(Pregunta p: preguntas){
            int opcionesValidas = 0;
            if(!respuestas){                
                for (Opcion o : p.getOpciones()) {
                    if (o.getCorrecta()) {
                        opcionesValidas++;
                    }
                }
                if (opcionesValidas < p.getNumRespuestas()) {
                    advertencia += "<li>Una o más preguntas requieren "
                            + "responder más opciones de las que hay disponibles.</li>";
                    respuestas = true;
                }
            }
            porcentaje += p.getPeso();
        }
        
        if(porcentaje != 100){
            advertencia += "<li>El peso de las preguntas suman " +porcentaje + 
                    "% y debería sumar 100%</li>";
        }        
        advertencia += "</ul>";
        t.setMensaje(advertencia);
        request.getSession().setAttribute("Test", t);
        return mapping.findForward(PAGE);
    }

    public ActionForward agregarPregunta(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        Pregunta p = (Pregunta) form;
        Test t = (Test) request.getSession().getAttribute("Test");
        if(t == null){
            System.out.println("Se perdio el atributo Test");
            return populate(mapping, form, request, response);
        }
        DataBaseManager d = DataBaseManager.getInstance();
        if (d.agregarPregunta(p)) {
//            t.agregarPregunta(p);
            t.setMensaje("Pregunta agregada con éxito");
        } else {
            t.setMensaje("Error agregando pregunta");
        }
        return this.populate(mapping, form, request, response);
    }

    public ActionForward modificarPregunta(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        Pregunta p = (Pregunta) form;
        Test t = (Test) request.getSession().getAttribute("Test");
        if(t == null){
            System.out.println("Se perdio el atributo Test");
            return populate(mapping, form, request, response);
        }
        DataBaseManager d = DataBaseManager.getInstance();
        if (d.modificarPregunta(p)) {
//            t.modificarPregunta(p);
            t.setMensaje("Pregunta modificada con éxito");
        } else {
            t.setMensaje("Error modificando pregunta");
        }
        return this.populate(mapping, form, request, response);
    }

    public ActionForward eliminarPregunta(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        Pregunta p = (Pregunta) form;
        Test t = (Test) request.getSession().getAttribute("Test");
        DataBaseManager d = DataBaseManager.getInstance();
        if (d.eliminarPregunta(p)) {
//            t.eliminarPregunta(p);
            t.setMensaje("Pregunta eliminada con éxito");
        } else {
            t.setMensaje("Error eliminando pregunta");
        }
        return this.populate(mapping, form, request, response);
    }

    public ActionForward agregarOpcion(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        Opcion o = (Opcion) form;
        Test t = (Test) request.getSession().getAttribute("Test");
        DataBaseManager d = DataBaseManager.getInstance();
        if (d.agregarOpcion(o)) {
//            t.agregarOpcion(o);
            t.setMensaje("Opción agregada con éxito");
        } else {
            t.setMensaje("Error agregando opción");
        }
        return this.populate(mapping, form, request, response);
    }

    public ActionForward modificarOpcion(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        Opcion o = (Opcion) form;
        Test t = (Test) request.getSession().getAttribute("Test");
        DataBaseManager d = DataBaseManager.getInstance();
        if (d.modificarOpcion(o)) {
//            t.modificarOpcion(o);
            t.setMensaje("Opción modificada con éxito");
        } else {
            t.setMensaje("Error modificando opción");
        }
        return this.populate(mapping, form, request, response);
    }

    public ActionForward eliminarOpcion(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        Opcion o = (Opcion) form;
        Test t = (Test) request.getSession().getAttribute("Test");
        DataBaseManager d = DataBaseManager.getInstance();
        if (d.eliminarOpcion(o)) {
//            t.eliminarOpcion(o);
            t.setMensaje("Opción eliminada con éxito");
        } else {
            t.setMensaje("Error eliminando opción");
        }
        return this.populate(mapping, form, request, response);
    }
}
